package com.leo.algorithm.linked;

/**
 *
 */
public class ReverseN {

    public static void main(String[] args) {


    }

    // 反转链表前n个节点
    // 反转以 head 为起点的 n 个节点，返回新的头结点
    static ListNode successor = null; // 后驱节点
    public static ListNode reverse(ListNode head, int n) {
        if (n == 1) {
            // 记录第 n + 1 个节点
            successor = head.getNext();
            return head;
        }
        // 以 head.next 为起点，需要反转前 n - 1 个节点
        ListNode last = reverse(head.getNext(), n - 1);

        head.getNext().setNext(head);
        // 让反转之后的 head 节点和后面的节点连起来
        head.setNext(successor);
        return last;
    }
}
